#include <iostream>
#include <string>
using std::cout;
using std::endl;
using std::string;
//制定一个统一的标准，可以和市面上绝大多数的数据库建立通讯
//比如常见的数据库有mysql、oracle、sql server分别隶属于三家不同的厂商的产品
//举例：poe，里面集成了众多的AI智能体，比如chatgpt的、claude、deepseek
//提供了一个统一的操作环境
//这个类里面的函数的代码逻辑没法给出实现，为什么呢？因为不同的厂商逻辑是完全不同的
//没法给出通用的逻辑
//13~31行的代码可以写在一个单独的文件中，作为标准、接口存在
class DBConnection{
public:
    //可以总结出各种不同的数据库具有的共性
    virtual void connect(string ipaddress, int port, string username, string password) = 0;

    virtual void sendSql(string sql) = 0;

    virtual void close() = 0;

};
void connect(DBConnection * db){
    db->connect("localhost", 9527, "admin", "123456");
}
void send(DBConnection * db, string sql){
    db->sendSql(sql);
}
void release(DBConnection * db){
    db->close();
}
//只需要给上述的指针变量进行赋值便可以进行使用


class Mysql : public DBConnection{
    virtual void connect(string ipaddress, int port, string username, string password){

    }

    virtual void sendSql(string sql){

    }

    virtual void close(){

    }
};
class Oracle : public DBConnection{
    virtual void connect(string ipaddress, int port, string username, string password){

    }

    virtual void sendSql(string sql){

    }

    virtual void close(){

    }
};
class SqlServer : public DBConnection{
    virtual void connect(string ipaddress, int port, string username, string password){

    }

    virtual void sendSql(string sql){

    }

    virtual void close(){

    }
};

DBConnection * db;
void setDb(DBConnection * p){
    db = p;
}
void test(){
    //=========================
    Mysql mysql;
    Oracle oracle;
    SqlServer sqlServer;
    //只需要调用setDb即可
    setDb(&mysql);
    //==========================所有的代码中唯一需要变动的部分



    //下面的代码也是不用变的
    connect(db);
    send(db, "select * from db1");
    release(db);
}

int main()
{
    test();
    return 0;
}

